package club.terroir.server;


import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import club.terroir.client.GreetingService;
import club.terroir.client.producteur.Contact;
import club.terroir.client.producteur.ContactFactory;
import club.terroir.client.producteur.Utilisateur;
import club.terroir.client.produit.Folder;

import club.terroir.client.produit.Produit;
import club.terroir.server.contact.Contact_SS_;
import club.terroir.server.contact.Contact_SSFactory;
import club.terroir.server.folder.Folder_SS;
import club.terroir.server.folder.Folder_SSFactory;
import club.terroir.server.user.Utilisateur_SS;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * The server side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
		GreetingService {

	public String greetServer(String input) throws IllegalArgumentException {
		return "Test Input No more implemented yet ";
	}

	

	@Override
	public List<Object> getListTest(String input) {
		return null;
	}

	@Override
	public Contact create(Contact contact) {
		System.out.println("GreetingServiceImpl.create Contact  "+contact);
		
		Contact_SS_ u = UtilServerTerroir.toUtilisateur(contact);
		u.setEmAilUtilisateur(getUtilisateur_SS().getEmail());
		Contact_SSFactory.getInstance().persist(u);
		Contact cRetour = UtilServerTerroir.toContact(u);
		return cRetour;
	}

	@Override
	public Utilisateur getUtilisateurCurrent() {
		Utilisateur u =UtilServerTerroir.toUtilisateur(getUtilisateur_SS());
		return u;
	}
	
	private Utilisateur_SS getUtilisateur_SS() {
		HttpServletRequest request = this.getThreadLocalRequest();		
		HttpSession session = request.getSession();
		Utilisateur_SS user =(Utilisateur_SS) session.getAttribute("user");
		return user;		
	}

	@Override
	public List<Contact> getListContacts() {
		try {
			System.out.println("getListContacts start");
			Utilisateur_SS u = getUtilisateur_SS();
			List<Contact_SS_> list = Contact_SSFactory.getInstance().getListContacts(u);
			System.out.println("getListContacts half "+list);
			
			List<Contact> list2 = UtilServerTerroir.toContacts(list);
			//System.out.println("getListContacts done utilisateur :"+u);
			//System.out.println("getListContacts done "+list2);
			return list2;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return ContactFactory.Client_GS_TEST_;
		}
	}



	@Override
	public Folder updateFolder(Folder f) {
		System.out.println("GreetingServiceImpl.updateFolder");
		System.out.println("GreetingServiceImpl.updateFolder start "+f.getName()+"  childreen.size: "+f.childreen.size());
		Folder_SS f_ss = UtilServerTerroir.toFolder_SS(f);
		if(f.getParent()==null){
			f_ss.setIsRoot(true);
			f_ss.setIdOwner(this.getUtilisateurCurrent().getEmail());
		}
		Folder_SSFactory.getInstance().persists(f_ss);
		System.out.println("GreetingServiceImpl.updateFolder"+f_ss);
		Folder fr = UtilServerTerroir.toFolder_SS(f_ss);
		System.out.println("GreetingServiceImpl.updateFolder done  "+fr.getName()+"  "+fr.childreen.size());
		return fr;
	}



	@Override
	public Folder getFolderRoot() {
		Folder folder = null;
		
		Folder_SS rootSS = Folder_SSFactory.getInstance().getFolderRoot(this.getUtilisateur_SS().getEmail()) ;
		if (rootSS == null){
			folder = UtilDebug.root_test;
		}else {
			folder= UtilServerTerroir.toFolder_SS(rootSS);
		}
		System.out.println("GreetingServiceImpl getFolderRoot !!! "+rootSS);
		System.out.println("GreetingServiceImpl getFolderRoot !!! "+folder);
		return folder;
	}



	@Override
	public void updateProduit(Produit produit) {
		System.out.println("update produit");
	}
	
	
}
